﻿using System;
using Soundteller.Bus.Handlers.Interfaces;
using Soundteller.Bus.Model.Interfaces;
using Soundteller.Bus.Services.Interfaces;
using Soundteller.Bus.Repositories.Interfaces;

namespace Soundteller.Bus.Services
{
    public class Subscriber : ISubscriber
    {
        private readonly IMessageHandlerRepository _messageHandlerRepository;

        public Subscriber(IMessageHandlerRepository messageHandlerRepository)
        {
            if (messageHandlerRepository == null) throw new ArgumentNullException("messageHandlerRepository");

            _messageHandlerRepository = messageHandlerRepository;
        }

        public void Subscribe(IMessageHandler messageHandler)
        {
            if (messageHandler == null) throw new ArgumentNullException("messageHandler");

            if (_messageHandlerRepository.Exists(messageHandler))
                return;

            _messageHandlerRepository.Add(messageHandler);
        }

        public void Unsubscribe(IMessageHandler messageHandler)
        {
            if (messageHandler == null) throw new ArgumentNullException("messageHandler");

            if (!_messageHandlerRepository.Exists(messageHandler))
                return;

            _messageHandlerRepository.Remove(messageHandler);
        }
    }
}
